package app.server.project.cloud.random.service;

import app.server.project.cloud.random.dto.device.DevStatusMgr;
import app.server.project.core.constants.TcpCmd;
import app.server.project.core.tcp.TcpSessionMgr;
import app.server.project.cloud.random.db.dao.DevStatusDao;
import app.server.project.cloud.random.db.entity.DevStatusEntity;
import cn.hutool.core.util.IdUtil;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@AllArgsConstructor
public class DevMgrService {

    private DevStatusDao devStatusDao;
    private TcpSessionMgr tcpSessionMgr;
    /**
     * 刷新设备数据库状态
     * @param
     */
    private void flushDbStatus(DevStatusMgr devStatusMgr){
        var statusList=this.devStatusDao.getData(devStatusMgr.getDevId());
        //检查状态是否存在库中
        devStatusMgr.getStatusDtoList().forEach(v->{
            var status=statusList.stream().filter(p->p.getAttarId().equals(v.getAttarId())).findAny();
            if (status.isEmpty()){
                //新加
                var one=DevStatusEntity.of(IdUtil.getSnowflakeNextId(),devStatusMgr.getDevId(), v.getAttarId(), v.getAttarVal());
                statusList.add(one);
            }else {
                //修改状态
                status.get().setAttarVal(v.getAttarVal());
            }
        });
    }

    /**
     * app 同步设备状态
     * @param devStatusMgr
     */
    public void appSyn(DevStatusMgr devStatusMgr){
        this.flushDbStatus(devStatusMgr);
        //同步设备状态
        this.tcpSessionMgr.push(devStatusMgr.getDevId(), TcpCmd.SynAttar,devStatusMgr);
    }

    /**
     * 设备同步状态信息
     * @param devStatusMgr
     */
    public void devSyn(DevStatusMgr devStatusMgr){
        this.flushDbStatus(devStatusMgr);
    }
}
